#include "common.hpp"
#include "utility.hpp"

namespace cuda
{

////////////////////////////////////////////////////////////////////////////////////////////////////
__global__ 
void __multiply(
	float2* a,			
	float2* b,
	float2* c,
	int nRows,						//Number of Rows
	int nCols)						//Number of Cols
{
	int idx = threadIdx.x + blockIdx.x*blockDim.x;
	if(idx < nRows*nCols)
	{
		c[idx].x = a[idx].x * b[idx].x;
		c[idx].y = a[idx].y * b[idx].y;
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void multiply(
	float2* a,			
	float2* b,
	float2* c,
	int nRows,						//Number of Rows
	int nCols)						//Number of Cols
{
	__multiply config(nRows*nCols, 1, 256, 1, 0)	\
		(a, b, c, nRows, nCols);
	cudaThreadSynchronize();
	cudaGetLastError();
}


////////////////////////////////////////////////////////////////////////////////////////////////////
__global__ 
void __divide(
	float2* a,			
	float2* b,
	float2* c,
	int nRows,						//Number of Rows
	int nCols)						//Number of Cols
{
	int idx = threadIdx.x + blockIdx.x*blockDim.x;
	if(idx < nRows*nCols)
	{
		c[idx].x = a[idx].x / b[idx].x;
		c[idx].y = a[idx].y / b[idx].y;
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void divide(
	float2* a,			
	float2* b,
	float2* c,
	int nRows,						//Number of Rows
	int nCols)						//Number of Cols
{
	__divide config(nRows*nCols, 1, 256, 1, 0)	\
		(a, b, c, nRows, nCols);
	cudaThreadSynchronize();
	cudaGetLastError();
}
}
